package com.myprinciple.singleton.type5;

/**
 * @author zhupanlin
 * @version 1.0
 * @description: TODO
 * @date 2024/4/10 16:57
 */
public class SingletonTest05 {

    public static void main(String[] args) {
        System.out.println("懒汉式3，线程不安全");
        // 测试
        Singleton instance = Singleton.getInstance();
        Singleton instance1 = Singleton.getInstance();
        // true 表示两个对象为同一个引用 
        System.out.println(instance1 == instance);
        System.out.println("instance.hashCode() = " + instance.hashCode());
        System.out.println("instance1.hashCode() = " + instance1.hashCode());
    }
    
}

// 懒汉式(线程不安全，同步方法)
class Singleton {
    private static Singleton instance;
    private Singleton() {}
    
    // 提供一个静态的公有方法，当使用到该方法时，才去创建instance，加入同步代码块，解决线程安全问题
    // 即懒汉式
    public static Singleton getInstance(){
        if (instance == null){
            // 此时可能有多个线程在这等待，等锁释放还是会创建多个实例，所以线程不安全
            synchronized (Singleton.class){
                instance = new Singleton();
            }
        }
        return instance;
    }
}
